iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
生成式 AI

LLM 應用、開發框架、RAG優化及評估方法 系列 第 18

Day18 GAI爆炸時代 - 市面上 Vector DB 比較

  • 分享至 

  • xImage
  •  

Vector Database比較

想要實作RAG前,必須先選個Vector DB 來儲存你embedding的資料囉,下面這些筆者選了幾款
常見的來做介紹,最後會再推薦為何自己會選用哪一款來實作唷

image

Vector databases use special search techniques known as Approximate Nearest Neighbor (ANN) search, which includes methods like hashing and graph-based searches.

圖片來源

Chroma

主要用途:向量數據庫
部署選項:本地和雲端
核心技術:HNSW(Hierarchical Navigable Small World)
性能:高
可擴展性:高
集成選項:Python
優點

  • 簡單易用,支持多種部署
  • 支持多種距離度量方式
  • 開源,社區驅動
    缺點
  • 社區支持相對較少,企業級支持有限

Milvus

主要用途:向量數據庫
部署選項:本地和雲端
核心技術:多種距離度量和ANN(Approximate Nearest Neighbor)算法,包括 HNSW、IVF_FLAT、IVF_SQ8、IVF_PQ、RNSG、ANNOY
性能:高
可擴展性:高
集成選項:Python, Java, Go, C++
優點

  • 強大的向量數據管理和靈活部署
  • 支持多種算法和距離度量方式
  • 社區活躍,有企業支持
    缺點
  • 需要專業知識來設置和優化

PostgreSQL

主要用途:關係型數據庫,支持向量數據
部署選項:本地和雲端
核心技術:pgvector(PostgreSQL 的向量搜索擴展)
性能:中
可擴展性:中
集成選項:多種編程語言支持,包括 Python, Java, Go 等
優點

  • 關係型數據庫功能強大,支持向量數據
  • 開源,廣泛使用和支持
  • 支持複雜查詢和事務
    缺點
  • 向量數據搜索性能有限,無法與專用向量數據庫相比

Pinecone

image

圖片來源

主要用途:專為高性能向量搜索設計
部署選項:僅雲端託管
核心技術:近似最近鄰(ANN)搜索
性能:高
可擴展性:高
集成選項:TensorFlow, PyTorch
優點

  • 專為向量數據設計,高性能和可擴展性
  • 雲原生,無需管理基礎設施
  • 集成流行的機器學習框架
    缺點
  • 僅雲端託管,無法本地部署

Elasticsearch

主要用途:多功能分佈式搜索和分析
部署選項:本地和雲端
核心技術:倒排索引, HNSW
性能:高
可擴展性:高
集成選項:多種插件和自定義選項
優點

  • 多功能,支持混合搜索和實時數據索引
  • 高度可擴展,支持大規模數據處理
  • 強大的社區和企業支持
    缺點
  • 需要額外的設置和管理來實現最佳性能

Redis

主要用途:高性能內存數據庫,支持實時應用
部署選項:本地和雲端
核心技術:RedisAI, RedisGears
性能:高
可擴展性:中
集成選項:多種部署選項
優點

  • 速度快,適合實時應用
  • 支持多種數據結構和操作
  • 開源,廣泛使用和支持
    缺點
  • 傳統上不是向量數據庫,需要模塊支持

Qdrant

  • 主要用途:向量數據庫
  • 部署選項:本地和雲端
  • 核心技術:HNSW(Hierarchical Navigable Small World)
  • 性能:高
  • 可擴展性:高
  • 集成選項:Python, REST API, gRPC
  • 優點
    • 開源,支持多種部署
    • 強大的社區支持
    • 支持高性能向量搜索
    • 靈活的集成選項,包括 REST API 和 gRPC
    • 支持多種距離度量方式,適合各種應用場景
    • 提供企業級支持和服務

缺點

  • 相對較新的技術,可能需要一些學習和適應
  • 部分功能和最佳實踐可能需要探索和實驗

MongoDB Atlas

主要用途:雲數據庫與搜索集成
部署選項:僅雲端託管
核心技術:HNSW
性能:中
可擴展性:中
集成選項:MongoDB生態系統
優點

  • 集成簡單,減少操作負擔
  • 結合 MongoDB 的強大功能和 Lucene 搜索引擎
  • 雲端託管,無需管理基礎設施
  • 適合需要簡單集成和管理的應用

缺點

  • 對大規模向量搜索效果不佳
  • 僅支持雲端託管,缺乏本地部署選項
  • 搜索性能和可擴展性不如專用的向量數據庫

應用場景:

  • 需要高性能和可擴展的向量搜索:

專用的向量數據庫如 Pinecone 或 Milvus 可能是最佳選擇。

  • 需要靈活的部署選項和多功能搜索:

Elasticsearch


筆者Vector DB選擇

筆者自己是選用Mongo DB Atlas來做為我存向量的DB,主要基於其靈活的資料結構(不局限於只儲存向量),還具備了高效的全文和向量檢索功能、擴展性、資料聚合能力,以及與最新技術的良好整合性(eg. LangChain、Python等都特別提供套件串接)。這些特點使得它能夠有效地支持複雜且大型的 RAG 系統,同時降低開發和運維的難度
選用 MongoDB Atlas 作為實作 Retrieval-Augmented Generation (RAG) 資料庫有以下幾個主要理由和解釋:

1. 文件導向資料結構

  • 解釋: MongoDB 是一個文件導向的 NoSQL 資料庫,它以 BSON(類似 JSON)格式存儲資料。這使得它特別適合存儲和檢索非結構化或半結構化資料,如文本、元數據和嵌套文件結構,這些通常是 RAG 系統中的核心元素。
  • 優勢: 文本資料(如文章、文件段落)可以自然地存儲在 MongoDB 中,並且能夠靈活地調整和查詢,而不需要提前定義嚴格的資料結構。

2. 強大的全文檢索能力

  • 解釋: MongoDB Atlas 提供了強大的內建全文檢索功能,可以針對文本內容進行高效的檢索,這在 RAG 系統中至關重要。
  • 優勢: 使用 MongoDB 的全文檢索功能,可以實現快速的文本檢索和匹配,進而提高資料檢索的速度和準確性,特別是在大型資料集上。

3. 支援向量搜尋功能

  • 解釋: MongoDB Atlas 現在支援原生的向量搜尋功能,這對於 RAG 系統來說至關重要,因為 RAG 通常需要基於語義相似度來檢索相關資料。
  • 優勢: 可以將文本資料轉換為嵌入向量,並使用 MongoDB 的向量搜尋來快速找到與用戶查詢最相似的資料,這大大提升了檢索的效果和效率。

4. 擴展性與高可用性

  • 解釋: MongoDB Atlas 是一個完全管理的雲端資料庫服務,提供自動擴展和高可用性,能夠輕鬆處理大規模資料集和高並發查詢。
  • 優勢: 在實作 RAG 系統時,資料量和查詢頻率可能會隨著應用的使用增長。MongoDB Atlas 能夠根據需求自動擴展並保證服務的穩定性,減少運維負擔。

5. 資料模型靈活性

  • 解釋: MongoDB 提供了靈活的資料模型,允許資料結構隨著需求的變化而演進,這對於 RAG 系統的開發和維護非常有利。
  • 優勢: 你可以根據不同的 RAG 應用場景來調整資料結構,如增強資料中的元數據、記錄用戶交互歷史等,這些變化不會影響系統的穩定性和性能。

6. 高效的資料聚合和分析

  • 解釋: MongoDB 擁有強大的聚合框架,允許對資料進行複雜的查詢和分析,這在 RAG 系統中可能需要對檢索結果進行進一步處理和篩選。
  • 優勢: 可以通過 MongoDB 的聚合框架來實現基於條件的檢索結果過濾、分組和排序,從而精確地提供符合用戶需求的資料。

7. 與其他工具的整合性

  • 解釋: MongoDB Atlas 可以無縫整合到現有的技術棧中,支援與各種分析工具、機器學習框架和應用程式進行整合。
  • 優勢: 在構建 RAG 系統時,可以輕鬆地與其他資料源、分析平台(如 Grafana、Elasticsearch)和機器學習工具(如 TensorFlow、PyTorch)進行整合,擴展系統功能。

MongoDB Atlas 搜索算法

image
圖片來源

使用 Apache Lucene 並在 Atlas 集群的每個節點上與 mongod process一起運行

  1. Atlas Search 的核心是 mongot (由API跟Apache Lucene組成,API主要用來跟mongod通訊),mongot 負責創建search index、監控文檔的變更流以及處理搜索查詢
  1. Mongod

負責數據庫的主要操作,包括數據存儲、數據處理和數據檢索。它處理來自客戶端的讀寫請求,執行數據庫操作,並確保數據的一致性和持久性

流程:

  1. User 先在 Atlas UI、API 或 CLI 中創建和配置索引規則(決定哪些字段需要被索引以及如何處理),在日後user進行search時,就會自動進行查找和過濾
  2. User可透過mongosh、Compass 或 Drivers 發送搜索查詢(如 $search)請求
  3. Mongod收到後,發送查詢請求給mongot進行處理
  4. mongot使用索引進行查找和過濾:使用 Lucene 搜索引擎來處理查詢。Lucene 會根據已建立的index rules快速查找和過濾出匹配的文檔
  • index作用

在於它已經預先對數據進行了分類和結構化,這樣在查詢時可以快速定位和檢索相關數據,而不需要掃描整個數據庫)

  1. mongot使用內部的 API 與 Mongod 進行交互,將查詢結果返回給 Mongod
  2. Mongod 將查詢結果返回給用戶,user可透過compass、mongosh、drivers去查看使用

下一回將詳細介紹一下MongoDB Atlas,
接下來就要開始實作RAG囉!


上一篇
Day17 GAI爆炸時代 - Azure OpenAI、Gateway介紹
下一篇
Day19 GAI爆炸時代 - MongoDB Atlas 介紹
系列文
LLM 應用、開發框架、RAG優化及評估方法 26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言